import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let listViewItems = [
    {
        "label": "ListView_Create",
        "insertText": dedent`
        GUI:ListView_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:width}, \${6:height}, \${7:direction})
        `,
        "documentation": dedent`# 创建列表容器
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数      | 必选 | 类型   | 注释             |
        | :-------- | :--- | :----- | :--------------- |
        | parent    | 是   | obj    | 父节点对象       |
        | ID        | 是   | string | 唯一ID           |
        | x         | 是   | int    | 位置 横坐标      |
        | y         | 是   | int    | 位置 纵坐标      |
        | width     | 是   | int    | 宽度             |
        | height    | 是   | int    | 高度             |
        | direction | 是   | int    | 1：垂直; 2：水平 |

        - 示例代码

        \`\`\`
        local listView = GUI:ListView_Create(parent,"listView", 0, 0, 300, 400, 1)
        \`\`\`
        `
    },
    {
        "label": "ListView_setGravity",
        "insertText": dedent`
        GUI:ListView_setGravity(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器对齐方式
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释                                                         |
        | :----- | :--- | :--- | :----------------------------------------------------------- |
        | widget | 是   | obj  | 容器对象                                                     |
        | value  | 是   | int  | 0：左对齐 1：右对齐 2：水平居中 3：顶对齐 4：底对齐 5：垂直居中 |
        `
    },
    {
        "label": "ListView_setDirection",
        "insertText": dedent`
        GUI:ListView_setDirection(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器滑动方向
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释             |
        | :----- | :--- | :--- | :--------------- |
        | widget | 是   | obj  | 容器对象         |
        | value  | 是   | int  | 1：垂直; 2：水平 |
        `
    },
    {
        "label": "ListView_setItemsMargin",
        "insertText": dedent`
        GUI:ListView_setItemsMargin(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器间隔
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释             |
        | :----- | :--- | :--- | :--------------- |
        | widget | 是   | obj  | 容器对象         |
        | value  | 是   | int  | 间隔大小(50像素) |
        `
    },
    {
        "label": "ListView_getItemsMargin",
        "insertText": dedent`
        GUI:ListView_getItemsMargin(\${1:widget})
        `,
        "documentation": dedent`# 获取列表容器间隔
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：间隔距离(像素)
        `
    },
    {
        "label": "ListView_setBounceEnabled",
        "insertText": dedent`
        GUI:ListView_setBounceEnabled(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器是否有回弹
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | bool | 是否有回弹 |
        `
    },
    {
        "label": "ListView_setClippingEnabled",
        "insertText": dedent`
        GUI:ListView_setClippingEnabled(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器是否有裁切
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | bool | 是否有裁切 |
        `
    },
    {
        "label": "ListView_setBackGroundColor",
        "insertText": dedent`
        GUI:ListView_setBackGroundColor(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器背景颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型   | 注释                                                         |
        | :----- | :--- | :----- | :----------------------------------------------------------- |
        | widget | 是   | obj    | 容器对象                                                     |
        | value  | 是   | string | 色值(“#000000”) ! 渐变色需传参table \`{"#FF0000", "#FFFFFF"}\` |
        `
    },
    {
        "label": "ListView_setBackGroundColorType",
        "insertText": dedent`
        GUI:ListView_setBackGroundColorType(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器背景颜色类型
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释               |
        | :----- | :--- | :--- | :----------------- |
        | widget | 是   | obj  | 容器对象           |
        | value  | 是   | int  | 1：单色，2：渐变色 |
        `
    },
    {
        "label": "ListView_setBackGroundColorOpacity",
        "insertText": dedent`
        GUI:ListView_setBackGroundColorOpacity(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器背景透明度
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释          |
        | :----- | :--- | :--- | :------------ |
        | widget | 是   | obj  | 容器对象      |
        | value  | 是   | int  | 透明度(0-255) |
        `
    },
    {
        "label": "ListView_setBackGroundImage",
        "insertText": dedent`
        GUI:ListView_setBackGroundImage(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置列表容器背景图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型   | 注释     |
        | :----- | :--- | :----- | :------- |
        | widget | 是   | obj    | 容器对象 |
        | value  | 是   | string | 图片路径 |
        `
    },
    {
        "label": "ListView_setBackGroundImageScale9Slice",
        "insertText": dedent`
        GUI:ListView_setBackGroundImageScale9Slice(\${1:widget}, \${2:scale9l}, \${3:scale9r}, \${4:scale9t}, \${5:scale9b})
        `,
        "documentation": dedent`# 设置列表容器背景图片九宫格
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数    | 必选 | 类型 | 注释     |
        | :------ | :--- | :--- | :------- |
        | widget  | 是   | obj  | 容器对象 |
        | scale9l | 是   | int  | 左边比例 |
        | scale9r | 是   | int  | 右边比例 |
        | scale9t | 是   | int  | 上边比例 |
        | scale9b | 是   | int  | 下边比例 |
        `
    },
    {
        "label": "ListView_removeBackGroundImage",
        "insertText": dedent`
        GUI:ListView_removeBackGroundImage(\${1:widget})
        `,
        "documentation": dedent`# 移除列表容器背景图片设置 [3.40.5版本]
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |
        `
    },
    {
        "label": "ListView_pushBackCustomItem",
        "insertText": dedent`
        GUI:ListView_pushBackCustomItem(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 列表容器加载子节点
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释                   |
        | :----- | :--- | :--- | :--------------------- |
        | widget | 是   | obj  | 容器对象               |
        | value  | 是   | obj  | 子节点对象（末尾加载） |
        `
    },
    {
        "label": "ListView_insertCustomItem",
        "insertText": dedent`
        GUI:ListView_insertCustomItem(\${1:widget}, \${2:value}, \${3:value2})
        `,
        "documentation": dedent`# 列表容器插入子节点
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释                |
        | :----- | :--- | :--- | :------------------ |
        | widget | 是   | obj  | 容器对象            |
        | value  | 是   | obj  | 子节点对象          |
        | value2 | 是   | int  | 序列号（index = 1） |
        `
    },
    {
        "label": "ListView_removeAllItems",
        "insertText": dedent`
        GUI:ListView_removeAllItems(\${1:widget})
        `,
        "documentation": dedent`# 列表容器删除所有子节点
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |
        `
    },
    {
        "label": "ListView_removeItemByIndex",
        "insertText": dedent`
        GUI:ListView_removeItemByIndex(\${1:widget}, \${2:index})
        `,
        "documentation": dedent`# 通过序列号删除列表容器子节点
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | index  | 是   | int  | 序列号位置 |
        `
    },
    {
        "label": "ListView_removeChild",
        "insertText": dedent`
        GUI:ListView_removeChild(\${1:widget}, \${2:item})
        `,
        "documentation": dedent`# 列表容器删除子节点
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | item   | 是   | obj  | 子节点对象 |
        `
    },
    {
        "label": "ListView_jumpToItem",
        "insertText": dedent`
        GUI:ListView_jumpToItem(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 跳转到列表容器序列号节点位置
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | int  | 序列号位置 |
        `
    },
    {
        "label": "ListView_scrollToTop",
        "insertText": dedent`
        GUI:ListView_scrollToTop(\${1:widget}, \${2:time}, \${3:boolvalue})
        `,
        "documentation": dedent`# 某一时间内滑动到列表容器顶部
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 滑动速度是否减弱 |
        `
    },
    {
        "label": "ListView_scrollToBottom",
        "insertText": dedent`
        GUI:ListView_scrollToBottom(\${1:widget}, \${2:time}, \${3:boolvalue})
        `,
        "documentation": dedent`# 某一时间内滑动到列表容器底部
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数      | 必选 | 类型 | 注释             |
        | :-------- | :--- | :--- | :--------------- |
        | widget    | 是   | obj  | 容器对象         |
        | time      | 是   | int  | 时间             |
        | boolvalue | 是   | bool | 滑动速度是否减弱 |
        `
    },
    {
        "label": "ListView_getTopmostItemInCurrentView",
        "insertText": dedent`
        GUI:ListView_getTopmostItemInCurrentView(\${1:widget})
        `,
        "documentation": dedent`# 获取列表容器最顶部可见范围子节点
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：顶部范围子节点对象
        `
    },
    {
        "label": "ListView_getBottommostItemInCurrentView",
        "insertText": dedent`
        GUI:ListView_getBottommostItemInCurrentView(\${1:widget})
        `,
        "documentation": dedent`# 获取列表容器最底部部可见范围子节点
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：底部范围子节点对象
        `
    },
    {
        "label": "ListView_getItemIndex",
        "insertText": dedent`
        GUI:ListView_getItemIndex(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 获取子节点序列号
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | obj  | 子节点对象 |

        - 返回值：子节点序列号
        `
    },
    {
        "label": "ListView_getItemByIndex",
        "insertText": dedent`
        GUI:ListView_getItemByIndex(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 通过子节点序列号获取子节点对象
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释         |
        | :----- | :--- | :--- | :----------- |
        | widget | 是   | obj  | 容器对象     |
        | value  | 是   | int  | 子节点序列号 |

        - 返回值：子控件对象
        `
    },
    {
        "label": "ListView_getItems",
        "insertText": dedent`
        GUI:ListView_getItems(\${1:widget})
        `,
        "documentation": dedent`# 获取列表容器所有子节点对象
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：所有子节点对象
        `
    },
    {
        "label": "ListView_getItemCount",
        "insertText": dedent`
        GUI:ListView_getItemCount(\${1:widget})
        `,
        "documentation": dedent`# 获取列表容器所有子节点数量
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：子节点总数量
        `
    },
    {
        "label": "ListView_addOnScrollEvent",
        "insertText": dedent`
        GUI:ListView_addOnScrollEvent(\${1:widget}, \${2:eventCB})
        `,
        "documentation": dedent`# 设置列表容器滚动事件
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数    | 必选 | 类型     | 注释     |
        | :------ | :--- | :------- | :------- |
        | widget  | 是   | obj      | 容器对象 |
        | eventCB | 是   | function | 事件函数 |
        `
    },
    {
        "label": "ListView_doLayout",
        "insertText": dedent`
        GUI:ListView_doLayout(\${1:widget})
        `,
        "documentation": dedent`# 列表容器刷新
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |
        `
    },
    {
        "label": "ListView_paintItems",
        "insertText": dedent`
        GUI:ListView_paintItems(\${1:widget})
        `,
        "documentation": dedent`# 列表容器可见区域绘制
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |
        `
    },
    {
        "label": "ListView_autoPaintItems",
        "insertText": dedent`
        GUI:ListView_autoPaintItems(\${1:widget})
        `,
        "documentation": dedent`# 列表容器可见区域自动绘制
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |
        `
    },
    {
        "label": "ListView_getInnerContainerSize",
        "insertText": dedent`
        GUI:ListView_getInnerContainerSize(\${1:widget})
        `,
        "documentation": dedent`# 获取列表容器滚动范围大小
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值 列表容器滚动范围大小
        `
    },
    {
        "label": "ListView_getInnerContainerPosition",
        "insertText": dedent`
        GUI:ListView_getInnerContainerPosition(\${1:widget})
        `,
        "documentation": dedent`# 获取列表容器内部滚动区域坐标
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值 列表容器内部滚动区域坐标
        `
    },
    {
        "label": "ListView_scrollToPercentVertical",
        "insertText": dedent`
        GUI:ListView_scrollToPercentVertical(\${1:widget}, \${2:percent}, \${3:time}, \${4:bool})
        `,
        "documentation": dedent`# 设置列表容器滚动到某百分比位置(垂直方向)
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数    | 必选 | 类型    | 注释             |
        | :------ | :--- | :------ | :--------------- |
        | widget  | 是   | obj     | 容器对象         |
        | percent | 是   | int     | 百分比(0-100)    |
        | time    | 是   | int     | 时间(秒)         |
        | bool    | 是   | boolean | 是否衰减滚动速度 |
        `
    },
    {
        "label": "ListView_scrollToPercentHorizontal",
        "insertText": dedent`
        GUI:ListView_scrollToPercentHorizontal(\${1:widget}, \${2:percent}, \${3:time}, \${4:bool})
        `,
        "documentation": dedent`# 设置列表容器滚动到某百分比位置(水平方向)
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数    | 必选 | 类型    | 注释             |
        | :------ | :--- | :------ | :--------------- |
        | widget  | 是   | obj     | 容器对象         |
        | percent | 是   | int     | 百分比(0-100)    |
        | time    | 是   | int     | 时间(秒)         |
        | bool    | 是   | boolean | 是否衰减滚动速度 |
        `
    },
    {
        "label": "ListView_addMouseScrollPercent",
        "insertText": dedent`
        GUI:ListView_addMouseScrollPercent(\${1:widget})
        `,
        "documentation": dedent`# 添加鼠标滚轮滑动列表容器事件
        [在线文档](http://engine-doc.996m2.com/web/#/22/2162)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |
        `
    },
]


export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    listViewItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
